<?php namespace Admin\Controller; 


//测试控制器
class CateController extends CommonController{
	// 定义一个私有属性$model，为了接受实例化Cate后的对象
	private $model;
	// 定义一个构造函数，因为后续每一步操作都需要用到模型，所以将实例化这一步骤放在构造函数中执行，并且注意他调动父级的构造函数，否则父级构造函数会被覆盖。
	public function __construct(){
		parent::__construct();
		$this->model = new \Admin\Model\Cate;
	}
	// 默认index方法，该方法的作用为:通过模型取得分类表的所有信息，将该变量赋予页面后显示
	public function index(){
		// 通过get()模型取得分类表的所有信息，该信息是个二维数组
		$data = $this->model->get();
		// 将得到的数组排列成树型结构赋值个变量$treeData
		$treeData = Data::tree($data,'cname','cid','pid');
		// 将树状结构的数据分配给页面，名称为data
		View::with('data',$treeData);
		// 显示页面
		View::make();
	}
	// 以下方法的作用为:检测是否有post提交动作，如果有，则通过模型方法addData添加数据(该方法是自己定义的一个方法，其中包括框架方法create和add方法，如果提交的数据通过规则判断并且成功添加后会返回一个结果true，反之返回false结果，通过返回的值，在以下方法中用来作为if体的判断条件，当条件为真则弹出success语句并跳转，反之则弹出错误信息，该错误信息是通过模型的getError这个框架自带的方法接收得到);
	public function add(){
		if (IS_POST) {
			if ($this->model->addData()) {
				View::success("添加成功",U('index'));
			}else{
				View::error($this->model->getError());
			}
		}
		View::make();
	}
	// 以下方法的作用为:添加子分类，if体内的判断跟add一样。只是多了将“点击的条目的父级名称查找出来并显示在页面”这一步骤
	public function addson(){
		if (IS_POST) {
			if ($this->model->addData()) {
				View::success('添加成功',U('index'));
			}else{
				View::error($this->model->getError());
			}
		}
		$cid = Q('get.cid',0,'intval');
		$data = $this->model->where("cid=$cid")->find();
		View::with('data',$data);
		View::make();
	}
	// 以下方法的作用为:删除所选分类条目，需要注意的是当某个分类条目被删除后，如果该分类有子分类的话会因为找不到父级而无法被tree重排而无法显示出来，为了解决这个问题，要将被删除的分类的子分类全部升位，既找到所有的子分类后见pid修改为父类pid的值
	public function del(){
		$cid = Q('get.cid',0,'intval');
		$data = $this->model->where("cid=$cid")->find();
		$pid = $data['pid'];
		$this->model->where("pid=$cid")->update(array('pid'=>$pid));
		$this->model->where("cid=$cid")->delete();
		View::success('删除成功');
	}

	// 以下方法的作用为:编辑分类信息，该方法用了框架方法的get和find方法，为了取出被编辑的子类信息，将其显示在编辑页面上，在编辑页面中用户可能需要修改分类等级，如果选择了自己或者自己的子类的话会它们之间的逻辑关系会出错，为了避免这个问题，需要将下拉选项框中的选项取出自身和自身自己的选项。于是用了cd递归函数先查找出该分类下的所有子分类，加上自身的cid得到一个$cd数组，页面在遍历循环创建select便签的时候跳过该数组包含的cid条目即可
	public function edit(){
		if (IS_POST) {
			// 该方法是模型中自定义的一个方法editData，该方法调用了框架方法create和save方法，作用为判断提交的数据是否符合规则，如果符合则保存数据
			if($this->model->editData())View::success('修改成功',U('index'));
			View::error($this->model->getError());
		}
		$cid = Q('get.cid');
		$data = $this->model->where("cid=$cid")->find();
		$cate = $this->model->getNoMy($cid);
		$cate = Data::tree($cate,'cname');
		View::with('data',$data);
		View::with('cate',$cate);
		View::make();
	}


}



